<?php
class UserHelper
{
	/**
	 * 增加新用户，并返回用户ID
	 */
	public static function add($loginname, $loginpwd, $nickname='', $email='')
	{
		$user_id	=	0;
		try
		{
			$user_id	=	User::instance()->add(array(
					'name'		=>	$loginname,
					'passwd'	=>	UserAuthHelper::encrypt($loginpwd),
					'nickname'	=>	$nickname,
					'atime'		=>	time(),
					'email'		=>	$email,
				));
		}
		catch(Exception $_){
			return false;
		}

		//增加用户虚拟role
		RoleHelper::addUserVirtualRole($user_id, $loginname);

		return $user_id;
	}

	/**
	 * 修改用户信息，登陆名不允许修改。
	 *
	 * @param $loginpwd	为空不重置密码
	 * @param $nickname	为空不重置昵称
	 */
	public static function modify($user_id, $loginpwd=null, $nickname=null, $email=null)
	{
		$data	=	array();
		if($loginpwd) {
			$data['passwd']	=	UserAuthHelper::encrypt($loginpwd);
		}
		if($nickname) {
			$data['nickname']	=	$nickname;
		}
		if($email) {
			$data['email']	=	$email;
		}
		if($data) {
			return User::instance()->update($user_id, $data);
		}
		return true;
	}

	/**
	 * 用户加入组。用户同时只能属于一个组，从现有用户组退出，再加入到新组。
	 */
	public static function joinGroup($user_id, $group_id)
	{
		//验证user_id和group_id
		$user	=	User::instance()->get($user_id);
		if(!$user) {
			return false;
		}
		$new_role_id	=	Group::instance()->getVirtualRoleId($group_id);
		if(!$new_role_id) {
			return false;
		}

		//退出旧组
		if($user['group_id'])
		{
			$group_role_id	=	Group::instance()->getVirtualRoleId($user['group_id']);
			Db::get('AclUr')->delete()->where(array('user_id'=>$user_id,'role_id'=>$group_role_id))->exec();
		}

		//加入新组(及Group Role)
		if(Db::get('AclUr')->insert(array('user_id'=>$user_id,'role_id'=>$new_role_id,'role_type'=>1))->exec())
		{
			User::instance()->update($user_id, array('group_id'=>$group_id));
			return true;
		}
		else {
			return false;
		}
	}

	/**
	 * 分配用户(非虚拟)角色。同一用户可分配多个角色
	 *
	 * @param $role_id	int|array	指定增加的角色ID(或数组)
	 */
	public static function assumeRole($user_id, $role_id)
	{
		if(!intval($user_id)) {
			return false;
		}

		if(!is_array($role_id)) {
			$role_id	=	array($role_id);
		}
		foreach($role_id as $rid)
		{
			if(!intval($rid)){
				continue;
			}
			try
			{
				Db::get('AclUr')->insert(array('user_id'=>$user_id,'role_id'=>$rid,'role_type'=>0))->exec();
			}
			catch (Exception $_)
			{}
		}
		
		return true;
	}

	/**
	 * 取用户role列表，用于显示
	 */
	public static function getRoles($user_id)
	{
		return Db::get('AclUr')->select()->where(array('user_id'=>$user_id))
				->join('Role')->on(array('t0.role_id=t1.role_id'))
				->order('t1.type DESC')
				->getAll();
	}

	/**
	 * 清空授与某人的所有角色/不含虚拟角色
	 */
	public static function purgeRoles($user_id)
	{
		return Db::get('AclUr')->delete()->where(array('user_id'=>$user_id,'role_type'=>0))->exec();
	}
	
}
?>